package FilesManagers;
import java.net.*;
import java.io.*;
import java.util.Date;
import java.util.StringTokenizer;
import java.util.regex.Pattern;

public class RemoteUrlManager{

	private String codificacion;
	
  private String obtenerCodificacion(String contenido){
	  
	  if(Pattern.matches(".*charset=.*",contenido)){
		  contenido = contenido.replaceAll(".*charset=","");
		  contenido = contenido.replaceAll(";.*","");
  	  }else{
  		  contenido="";
  	  }
	  return contenido;
	  
	  
	  
  }
  private void setCodificacion(String contenido){
	  
	  contenido = this.obtenerCodificacion(contenido);
	  if(contenido.compareTo("")==0){
		  	this.codificacion="Latin1";
	  }else{
		  this.codificacion=contenido.trim();
		  
	  }
	  
  }
  public String getCodificacion(){
	  return this.codificacion;
	  
  }
	
	
  public void copiar(String urlBuscada,String nombreDestino)
  {

      try
      {
          URL url  = new URL(urlBuscada);
          System.out.println("Abriendo conexion a " + urlBuscada + "...");
          URLConnection urlC = url.openConnection();
          // Copia la web a un archivo, si no esta definido una nombre se usa el remoto
          InputStream is = url.openStream();
          
          // Muestra info de la pagina
          System.out.print("Copiando  (tipo: " +urlC.getContentType());
          this.setCodificacion(urlC.getContentType());
          Date date=new Date(urlC.getLastModified());

          System.out.println(", modificado en: " + date.toLocaleString() + " codificacion: "+ urlC.getContentEncoding()+")...");
          System.out.flush();

          FileOutputStream fos=null;
          if (nombreDestino.compareTo("")==0)
          {
              String localFile=null;
              // Obtenemos el nombre de la pagina
              StringTokenizer st=new StringTokenizer(url.getFile(), "/");

              while (st.hasMoreTokens())
                     localFile=st.nextToken();
              fos = new FileOutputStream(localFile);
          }
          else
              fos = new FileOutputStream(nombreDestino);

          int oneChar, count=0;
          while ((oneChar=is.read()) != -1)
          {
             fos.write(oneChar);
             count++;
          }

          is.close();
          fos.close();

          System.out.println(count + " byte(s) copiados");
      }
      catch (MalformedURLException e)
      {
		  	System.err.println(e.toString());
	  }
      catch (IOException e)
      {
		  	System.err.println(e.toString());
	  }

  }









}